import { Injectable, Inject, Optional } from '@nestjs/common';
import type { Cat } from './interfaces/cat.interface';
import type { GlobalConfig } from '../app/interfaces/config.interface';
import type { CatConfig, CatDatabaseOptions } from './interfaces/config.interface';

/**
 * 猫咪服务类
 * @Injectable() 装饰器标记这是一个可注入的服务，可以被其他类通过依赖注入使用
 *
 * 本服务同时使用了：
 * 1. 全局提供者（GLOBAL_CONFIG）- 来自 AppModule
 * 2. 模块提供者（CAT_CONFIG, CAT_DATABASE_OPTIONS）- 来自 CatModule
 */
@Injectable()
export class CatsService {
	// 存储猫咪数据的私有数组（模拟数据库存储）
	private readonly cats: Cat[] = [];

	/**
	 * 构造函数 - 同时注入全局和模块级别的配置
	 *
	 * @param globalConfig 全局配置，来自 AppModule 的提供者
	 * @param catConfig Cat 模块专用配置，来自 CatModule 的提供者
	 * @param dbOptions Cat 数据库配置，来自 CatModule 的提供者（可选） 使用@optional装饰器标记为可选注入 如果全局没有配置该提供者，则不会报错 则是会通过undefined值注入
	 */
	constructor(
		@Inject('GLOBAL_CONFIG') private globalConfig: GlobalConfig, // 全局配置
		@Inject('CAT_CONFIG') private catConfig: CatConfig, // Cat 模块配置
		@Optional() @Inject('CAT_DATABASE_OPTIONS') private dbOptions?: CatDatabaseOptions, // Cat
	) {
		// 初始化时输出配置信息
		console.log('🌍 全局配置:', this.globalConfig);
		console.log('🐱 Cat 模块配置:', this.catConfig);
		console.log('💾 Cat 数据库配置:', this.dbOptions);
		console.log(
			`📋 服务初始化完成 - 应用: ${this.globalConfig?.appName}, 模块: ${this.catConfig?.moduleScope}`,
		);
	}

	/**
	 * 创建新猫咪
	 * 使用模块配置进行业务逻辑处理
	 * @param cat 猫咪对象
	 */
	create(cat: Cat) {
		// 检查是否超过最大猫咪数量限制（使用模块配置）
		if (this.cats.length >= this.catConfig.maxCats) {
			throw new Error(`最多只能创建 ${this.catConfig.maxCats} 只猫咪`);
		}

		// 如果没有指定品种，使用默认品种（使用模块配置）
		if (!cat.breed) {
			cat.breed = this.catConfig.defaultBreed;
		}

		this.cats.push(cat);

		// 使用全局配置中的应用名称记录日志
		console.log(
			`[${this.globalConfig?.appName || 'App'}] 创建了新猫咪: ${cat.name}，品种: ${cat.breed}`,
		);

		// 使用数据库配置信息（如果有的话）
		if (this.dbOptions) {
			console.log(`💾 数据将保存到: ${this.dbOptions.database}.${this.dbOptions.table}`);
		}
	}

	/**
	 * 获取所有猫咪
	 * @returns 猫咪数组
	 */
	findAll(query: { pageNum: number; pageSize: number }): Cat[] {
		console.log(
			`📊 当前共有 ${this.cats.length} 只猫咪，最大限制: ${this.catConfig.maxCats}, 当前页码: ${query.pageNum}, 每页大小: ${query.pageSize}`,
		);
		return this.cats;
	}

	/**
	 * 获取服务配置信息
	 * 展示全局和模块级别的配置
	 * @returns 配置信息汇总
	 */
	getConfigInfo(): {
		global: GlobalConfig;
		module: CatConfig;
		database: CatDatabaseOptions | undefined;
	} {
		return {
			global: this.globalConfig,
			module: this.catConfig,
			database: this.dbOptions,
		};
	}
}
